package com.zbf.chongshi;

import lombok.SneakyThrows;
import org.springframework.retry.RetryCallback;
import org.springframework.retry.RetryContext;
import org.springframework.retry.RetryListener;
import org.springframework.stereotype.Component;

import javax.servlet.annotation.WebListener;

/**
 * @author: LCG
 * @Date: 2021-10-21 12:17:11
 * @description:
 **/
@Component("myRetryListener")
public class MyRetryListener implements RetryListener {

    /** 
     * @author: LCG
     * @date: 2021/10/21
     * @description:  开始第一次调用目标方法的时候进入这个方法
     */
    @Override
    public <T, E extends Throwable> boolean open(RetryContext retryContext, RetryCallback<T, E> retryCallback) {
        System.out.println("=====获取AccessToken重试===="+retryContext.getLastThrowable());
        return true;
    }

    /**
     * @author: LCG
     * @date: 2021/10/21
     * @description:  最后一次调用用目标方法结束的时候进入这个方法
     */
    @Override
    public <T, E extends Throwable> void close(RetryContext retryContext, RetryCallback<T, E> retryCallback, Throwable throwable) {
        System.out.println("--:"+retryContext.getLastThrowable());
    }

    /** 
     * @author: LCG
     * @date: 2021/10/21
     * @description:  调用目标方法出错的时候进入这个方法
     */
    @Override
    public void onError(RetryContext retryContext, RetryCallback retryCallback, Throwable throwable) {
        System.out.println("=====onError===="+retryContext.getLastThrowable());
        try {
            retryCallback.doWithRetry(retryContext);
        } catch (Throwable e) {
            e.printStackTrace();
        }


    }
}
